package dao;

import static dao.AlunoDAO.abreConexao;
import model.Aluno;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import util.HibernateUtil;

public class AlunoDAO {

    private static Session session;
    private static Transaction transaction;

    @BeforeClass
    public static void abreConexao() {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        transaction = session.beginTransaction();
    }

    @AfterClass
    public void fechaConexao() {
        try {
            transaction.commit();
        } catch (Throwable e) {
            System.out.println("problema no commit" + e.getMessage());
        } finally {
            try {
                if (session.isOpen()) {
                    session.close();
                }
            } catch (Exception e) {
                System.out.println("problema ao fachar conexao" + e.getMessage());
            }
        }
    }


    public ArrayList<Aluno> getListaAlunos() {
        String sql = "from Aluno";
        abreConexao();
        Query consulta = session.createQuery(sql);

        ArrayList<Aluno> listaAlunos = (ArrayList<Aluno>) consulta.list();

        fechaConexao();

        return listaAlunos;

    }

    public List<Aluno> getListaAlunos2() {
        abreConexao();
        Criteria lista = session.createCriteria(Aluno.class);
        List<Aluno> listaAlunos = lista.list();
        fechaConexao();
        return listaAlunos;
    }

    public boolean adicionaAluno(Aluno aluno) {
        abreConexao();
        try {
            session.save(aluno);
            return true;
        } catch (Exception e) {
            System.out.println("Erro ao adicionar aluno! - " + e.getMessage());
            return false;
        } finally {
            fechaConexao();
        }
    }

    public Aluno getAluno(String matricula) {
        String sql = "from Aluno aluno WHERE aluno.matricula = :matricula";
        abreConexao();
        Query consulta = session.createQuery(sql);
        consulta.setString("matricula", matricula);

        Aluno alunoPesquisado = (Aluno) consulta.uniqueResult();

       fechaConexao();
 
        return alunoPesquisado;
    }

}
